Next:
7. Factory Function
, Previous:
9. Do Not Use virtual Function at CTOR & DTOR
, Up:
Index
8. Destructor try-catch(exception)
소멸자 자원 관리 클래스에서 예외가 발생할 시,
1. 프로그램 종료( std::abort() )
2. 예외를 삼킴: 예외를 무시한 후, 이 후 처리 지속
3. 사용자에게 책임을 위임
class
DBConnection
{
public
:
// ...
static
DBConnection
create
(
)
;
void
close
(
)
;
}
;
class
DBConn
{
// DBConnection
자
원
관
리
class
public
:
// ...
void
close
(
void
)
{
db
.
close
(
)
;
closed
=
true
;
}
~
DBConn
(
)
{
if
(
!
closed
)
{
try
{
db
.
close
(
)
;
}
catch
(
...
)
{
// fail log
std
::
abort
(
)
;
//
프
로
그
램
종
료
}
}
}
private
:
DBConnection
db
;
bool
closed
;
}
;
소멸자는 예외가 빠져 나가서는 안된다.
소멸자 내에서 호출된 함수가 예외를 던질 가능성이 있다면,
어떤 예외이던지 소멸자 내부에서 받아내서 처리해야 한다.
던진 예외에 대해 사용자가 반응을 해야 하는 경우,
소멸자가 아닌 일반 함수에서 연산을 제공해야 함